package com.learn.kafka.serializer;

import com.learn.kafka.config.ProducerProperties;
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.Producer;
import org.apache.kafka.clients.producer.ProducerRecord;

/**
 * 使用ProtobufSerializer序列化User对象的生产者（继承通用配置父类）
 * @author: learn.kafka
 */
public class SerializerProducer extends ProducerProperties {


    public static void main(String[] args) {
        new SerializerProducer().sendMessage();
    }

    // 构造方法：初始化当前生产者的特殊配置
    public SerializerProducer() {
        super(); // 调用父类构造方法，加载通用配置
        initProducerConfig();
    }

    // 初始化当前生产者的特殊配置（覆盖或补充父类配置）
    private void initProducerConfig() {
        // 关键：使用自定义的ProtobufSerializer序列化User对象（覆盖父类的StringSerializer）
        setProperty("value.serializer", ProtobufSerializer.class.getName());
    }

    // 发送消息的核心逻辑：序列化User对象并发送到ser-topic
    private void sendMessage() {
        // 从父类获取生产者实例（泛型为<String, User>，匹配键值类型）
        Producer<Integer, User> producer = new KafkaProducer<>(super.getProps());

        // 创建User对象并发送
        User user = new User(100L, "learn.kafka", 1, "13677778888");
        producer.send(new ProducerRecord<>("ser-topic", 1, user));
        System.out.println("已发送User对象: " + user);

        // 关闭生产者，释放资源
        producer.close();
    }
}
